import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

// 定义数据库Mock模型
final String tableName = 'step_task_table';                       // 数据库名称
final String columnId = '_id';                                    // 索引id
final String columnType = 'step_listType';                        // 列表类型
final String columnStepListData = 'step_listData';                // 列表数据
final String columnStepDataDetails = 'step_status';               // 列表详情数据


// 定义模板模型类
class StepTasks {
  var id;
  var stepListType;                                            // 列表类型
  var stepListData;                                            // 列表数据
  var stepDataDetails;                                         // 详情数据

  StepTasks({this.id, this.stepListType, this.stepListData, this.stepDataDetails});

  // 模型转Map数据使用
  Map<String, Object> toMap() {
    var map = <String ,Object>{
      columnType:stepListType,
      columnStepListData:stepListData,
      columnStepDataDetails:stepDataDetails
    };
    if (id != null) {
      map[columnId] = id;
    }
    return map;
  }

  // 模型数据传入类中
  StepTasks.fromMap(Map<String, Object> map){
    id = map[columnId];
    stepListType = map[columnType];
    stepListData = map[columnStepListData];
    stepDataDetails = map[columnStepDataDetails];
  }
}

// 定义数据库
class StepTasksDb {
 late Database db;

  // 初始化数据库
  Future<String> initDatabase() async {
    // 获取本地存储数据库路径
    var databasesPath = await getDatabasesPath();
    // 创建数据库db文件
    String path = join(databasesPath, 'stepTasks.db');
    return path;
  }

  // 打开并创建表
  Future open(String path) async {
    print('------------------打开并创建表<StepTasksDb>------------------');
    db = await openDatabase(path, version:1, onCreate:(Database db, int version) async {
      await db.execute('''
        create table $tableName (
          $columnId integer primary key autoincrement,
          $columnType text ,
          $columnStepListData text ,
          $columnStepDataDetails text
        )
      ''');
    });
  }

  // 添加数据
  Future<StepTasks> insert(StepTasks data) async {
    data.id = await db.insert(tableName, data.toMap());
    return data;
  }

  // 获取数据(根据type条件查询)
  Future<List> getData({type = ''}) async {
    List<Map> maps = [];
    maps = await db.query(tableName, columns:[columnId, columnType, columnStepListData, columnStepDataDetails], where: '$columnType = ?', whereArgs: [type]);

    if(maps ==null || maps.length == 0){
      return [];
    }

    List list = [];

    for(int i = 0; i<maps.length; i++){
      list.add(maps[i]);
    }

    return list;
  }


  // 修改数据（通过id匹配修改整个数据）
  Future<int> update(StepTasks data) async {
    return await db.update(tableName, data.toMap(), where: '$columnId = ?', whereArgs: [data.id]);
  }

  // 删除数据（通过id匹配删除数据）
  Future<int> delete(int id) async {
    return await db.delete(tableName, where:'$columnId = ?', whereArgs:[id]);
  }

  // 关闭此表的链接
  Future close() async => db.close();
}
